library(IBRAP)
library(ggpubr)

integrated <- readRDS('integration_analyses.rds')

datasets <- names(integrated)

norm.methods <- c('RAW', 'SCT', 'SCRAN', 'SCANPY')

clust.methods <- names(integrated$pancreas@methods$SCT@benchmark_results$clustering)

count <- 1

all_results <- data.frame(sample = character(), normalisation = character(), preprocessing = character(), 
                          parameter = character(), ARI = numeric(), NMI = numeric(), ASW = numeric())

for(x in datasets) {
  print(x)
  for(t in 2:4) {
    
    for(u in seq_along(clust.methods)) {
      
      row.nam <- rownames(integrated[[x]]@methods[[t]]@benchmark_results[['clustering']][[clust.methods[[u]]]])
      
      counter <- 1
      
      for(m in rownames(integrated[[x]]@methods[[t]]@benchmark_results[['clustering']][[clust.methods[[u]]]])) {
        
        all_results[count, 'sample'] <- x
        
        all_results[count, 'normalisation'] <- norm.methods[t]
        
        all_results[count, 'preprocessing'] <- clust.methods[u]
        
        all_results[count, 'parameter'] <- row.nam[counter]
        
        # print(clust.methods[u])
        
        if(is.na(integrated[[x]]@methods[[t]]@benchmark_results[['clustering']][[clust.methods[[u]]]][m,4])) {
          
          print('bump')
          
        }
        
        all_results[count, 'ARI'] <- integrated[[x]]@methods[[t]]@benchmark_results[['clustering']][[clust.methods[[u]]]][m,4]
        
        all_results[count, 'NMI'] <- integrated[[x]]@methods[[t]]@benchmark_results[['clustering']][[clust.methods[[u]]]][m,5]
        
        all_results[count, 'ASW'] <- integrated[[x]]@methods[[t]]@benchmark_results[['clustering']][[clust.methods[[u]]]][m,1]
        
        count <- count + 1
        
        counter <- counter + 1
        
      }
      
    }
    
  }
  
}

all_results <- all_results[order(all_results$sample),]

list.of.results <- list()

for(i in datasets) {
  
  list.of.results[[i]] <- all_results[all_results$sample==i,]
  
}

for(i in datasets) {
  
  list.of.results[[i]]$ARI_rank <- rank(list.of.results[[i]]$ARI)
  list.of.results[[i]]$NMI_rank <- rank(list.of.results[[i]]$NMI)
  list.of.results[[i]]$ASW_rank <- rank(list.of.results[[i]]$ASW)
  
}

for(i in datasets) {
  
  list.of.results[[i]]$Score <- apply(X = list.of.results[[i]][,c('ARI_rank','NMI_rank','ASW_rank')], MARGIN = 1, FUN = function(x) {
    
    mean(x)
    
  })
  
}

all_results <- do.call(rbind, list.of.results)

tempo <- strsplit(x = all_results[grepl(pattern = 'neighbourhood', all_results$parameter),]$parameter, split = '_')
tempor <- list()
count <- 1

for(u in tempo) {
  
  tempor[[count]] <- tempo[[count]][3]
  count <- count + 1
  
}

all_results[grepl(pattern = 'neighbourhood', all_results$parameter),]$parameter <- unlist(tempor)

all_results$Score_scaled <- 100

for(x in unique(all_results$sample)) {
  
  all_results[all_results$sample==x,]$Score_scaled <- scales::rescale(x = all_results[all_results$sample==x,]$Score, to = c(0,100))
  
}

all_results$Score_percent <- all_results$Score/1172*100

all_results$integration = ''
all_results$integration[grepl(pattern = 'HARMONY', x = all_results$preprocessing)] = 'HARMONY'
all_results$integration[grepl(pattern = 'SCANORAMA', x = all_results$preprocessing)] = 'SCANORAMA'
all_results$integration[grepl(pattern = 'CCA', x = all_results$preprocessing)] = 'SEURAT CCA'
all_results$integration[grepl(pattern = 'BBKNN', x = all_results$preprocessing)] = 'BBKNN'
all_results$integration[all_results$integration==''] = 'UNCORRECTED'
all_results$preprocessing <- gsub(x = all_results$preprocessing, pattern = '_BENCHMARKED', replacement = '')
write.csv(x = all_results, file = 'supplementary_table_5.csv')

Creating Figure 4

Panel A

plot1 <- ggplot(data = all_results[all_results=='pancreas',], 
                mapping = aes(y = ARI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ARI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot2 <- ggplot(data = all_results[all_results=='pancreas',], 
                mapping = aes(y = NMI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('Analysis 1') + 
  ylab('NMI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot3 <- ggplot(data = all_results[all_results=='pancreas',], 
                mapping = aes(y = ASW, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ASW') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

ggpubr::ggarrange(plot1,plot2,plot3,nrow = 1, ncol = 3, common.legend = T)

Panel B

plot4 <- ggplot(data = all_results[all_results=='equal',], 
                mapping = aes(y = ARI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ARI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot5 <- ggplot(data = all_results[all_results=='equal',], 
                mapping = aes(y = NMI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('Analysis 2') + 
  ylab('NMI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot6 <- ggplot(data = all_results[all_results=='equal',], 
                mapping = aes(y = ASW, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ASW') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

ggpubr::ggarrange(plot4,plot5,plot6,nrow = 1, ncol = 3, common.legend = T)

Panel C

plot7 <- ggplot(data = all_results[all_results=='unequal',], 
                mapping = aes(y = ARI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ARI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot8 <- ggplot(data = all_results[all_results=='unequal',], 
                mapping = aes(y = NMI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('Analysis 3') + 
  ylab('NMI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot9 <- ggplot(data = all_results[all_results=='unequal',], 
                mapping = aes(y = ASW, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ASW') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

ggpubr::ggarrange(plot7,plot8,plot9,nrow = 1, ncol = 3, common.legend = T)

Panel D

plot10 <- ggplot(data = all_results[all_results=='symsim_simulations_1',], 
                 mapping = aes(y = ARI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ARI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot11 <- ggplot(data = all_results[all_results=='symsim_simulations_1',], 
                 mapping = aes(y = NMI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('Analysis 4') + 
  ylab('NMI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot12 <- ggplot(data = all_results[all_results=='symsim_simulations_1',], 
                 mapping = aes(y = ASW, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ASW') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

ggpubr::ggarrange(plot10,plot11,plot12,nrow = 1, ncol = 3, common.legend = T)

Supplementary Figure 4

plot13 <- ggplot(data = all_results[all_results=='symsim_simulations_2',], 
                 mapping = aes(y = ARI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ARI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot14 <- ggplot(data = all_results[all_results=='symsim_simulations_2',], 
                 mapping = aes(y = NMI, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('Analysis 5') + 
  ylab('NMI') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot15 <- ggplot(data = all_results[all_results=='symsim_simulations_2',], 
                 mapping = aes(y = ASW, x = integration, fill = normalisation)) + 
  geom_boxplot(na.rm = TRUE) + 
  theme_classic() + 
  ggtitle('') + 
  ylab('ASW') + xlab('') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

ggpubr::ggarrange(plot13,plot14,plot15,nrow = 1, ncol = 3, common.legend = T)

Supplementary Figure 5

Panel A

plot.integration.benchmarking(object = integrated$pancreas, c('SCT','SCRAN','SCANPY')) + 
  ggtitle('Analysis 1') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot.integration.benchmarking(object = integrated$equal, c('SCT','SCRAN','SCANPY')) + 
  ggtitle('Analysis 2') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot.integration.benchmarking(object = integrated$unequal, c('SCT','SCRAN','SCANPY')) + 
  ggtitle('Analysis 3') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot.integration.benchmarking(object = integrated$symsim_simulations_1, c('SCT','SCRAN','SCANPY')) + 
  ggtitle('Analysis 4') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

plot.integration.benchmarking(object = integrated$symsim_simulations_2, c('SCT','SCRAN','SCANPY')) + 
  ggtitle('Analysis 5') + 
  theme(axis.text.x = element_text(colour = 'black', angle = 90, hjust = 1, 
                                   face = 'bold', size = 12),
        plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.text.y = element_text(colour = 'black', face = 'bold', size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 20), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12), 
        axis.title.x.bottom = element_text(face = 'bold', size = 15), 
        axis.title.y.left = element_text(face = 'bold', size = 15)) + 
  guides(fill=guide_legend(title="Normalisation Method"))

Supplementary Figure 4 B

SCT_uncorrected <- mean(integrated$pancreas@methods$SCT@benchmark_results$integration$SCT_uncorrected,
                        integrated$equal@methods$SCT@benchmark_results$integration$SCT_uncorrected,
                        integrated$unequal@methods$SCT@benchmark_results$integration$SCT_uncorrected,
                        integrated$symsim_simulations_1@methods$SCT@benchmark_results$integration$SCT_uncorrected,
                        integrated$symsim_simulations_2@methods$SCT@benchmark_results$integration$SCT_uncorrected)

SCT_harmony <- mean(integrated$pancreas@methods$SCT@benchmark_results$integration$SCT_harmony,
                    integrated$equal@methods$SCT@benchmark_results$integration$SCT_harmony,
                    integrated$unequal@methods$SCT@benchmark_results$integration$SCT_harmony,
                    integrated$symsim_simulations_1@methods$SCT@benchmark_results$integration$SCT_harmony,
                    integrated$symsim_simulations_2@methods$SCT@benchmark_results$integration$SCT_harmony)

SCT_scanorama <- mean(integrated$pancreas@methods$SCT@benchmark_results$integration$SCT_scanorama,
                      integrated$equal@methods$SCT@benchmark_results$integration$SCT_scanorama,
                      integrated$unequal@methods$SCT@benchmark_results$integration$SCT_scanorama,
                      integrated$symsim_simulations_1@methods$SCT@benchmark_results$integration$SCT_scanorama,
                      integrated$symsim_simulations_2@methods$SCT@benchmark_results$integration$SCT_scanorama)

SCT_bbknn <- mean(integrated$pancreas@methods$SCT@benchmark_results$integration$SCT_bbknn,
                  integrated$equal@methods$SCT@benchmark_results$integration$SCT_bbknn,
                  integrated$unequal@methods$SCT@benchmark_results$integration$SCT_bbknn,
                  integrated$symsim_simulations_1@methods$SCT@benchmark_results$integration$SCT_bbknn,
                  integrated$symsim_simulations_2@methods$SCT@benchmark_results$integration$SCT_bbknn)

SCT_cca <- mean(integrated$pancreas@methods$SCT@benchmark_results$integration$SCT_seurat,
                integrated$equal@methods$SCT@benchmark_results$integration$SCT_seurat,
                integrated$unequal@methods$SCT@benchmark_results$integration$SCT_seurat,
                integrated$symsim_simulations_1@methods$SCT@benchmark_results$integration$SCT_cca,
                integrated$symsim_simulations_2@methods$SCT@benchmark_results$integration$SCT_cca)

SCRAN_uncorrected <- mean(integrated$pancreas@methods$SCRAN@benchmark_results$integration$SCRAN_uncorrected,
                          integrated$equal@methods$SCRAN@benchmark_results$integration$SCRAN_uncorrected,
                          integrated$unequal@methods$SCRAN@benchmark_results$integration$SCRAN_uncorrected,
                          integrated$symsim_simulations_1@methods$SCRAN@benchmark_results$integration$SCRAN_uncorrected,
                          integrated$symsim_simulations_2@methods$SCRAN@benchmark_results$integration$SCRAN_uncorrected)

SCRAN_harmony <- mean(integrated$pancreas@methods$SCRAN@benchmark_results$integration$SCRAN_harmony,
                      integrated$equal@methods$SCRAN@benchmark_results$integration$SCRAN_harmony,
                      integrated$unequal@methods$SCRAN@benchmark_results$integration$SCRAN_harmony,
                      integrated$symsim_simulations_1@methods$SCRAN@benchmark_results$integration$SCRAN_harmony,
                      integrated$symsim_simulations_2@methods$SCRAN@benchmark_results$integration$SCRAN_harmony)

SCRAN_scanorama <- mean(integrated$pancreas@methods$SCRAN@benchmark_results$integration$SCRAN_scanorama,
                        integrated$equal@methods$SCRAN@benchmark_results$integration$SCRAN_scanorama,
                        integrated$unequal@methods$SCRAN@benchmark_results$integration$SCRAN_scanorama,
                        integrated$symsim_simulations_1@methods$SCRAN@benchmark_results$integration$SCRAN_scanorama,
                        integrated$symsim_simulations_2@methods$SCRAN@benchmark_results$integration$SCRAN_scanorama)

SCRAN_bbknn <- mean(integrated$pancreas@methods$SCRAN@benchmark_results$integration$SCRAN_bbknn,
                    integrated$equal@methods$SCRAN@benchmark_results$integration$SCRAN_bbknn,
                    integrated$unequal@methods$SCRAN@benchmark_results$integration$SCRAN_bbknn,
                    integrated$symsim_simulations_1@methods$SCRAN@benchmark_results$integration$SCRAN_bbknn,
                    integrated$symsim_simulations_2@methods$SCRAN@benchmark_results$integration$SCRAN_bbknn)

SCRAN_cca <- mean(integrated$pancreas@methods$SCRAN@benchmark_results$integration$SCRAN_seurat,
                  integrated$equal@methods$SCRAN@benchmark_results$integration$SCRAN_seurat,
                  integrated$unequal@methods$SCRAN@benchmark_results$integration$SCRAN_seurat,
                  integrated$symsim_simulations_1@methods$SCRAN@benchmark_results$integration$SCRAN_cca,
                  integrated$symsim_simulations_2@methods$SCRAN@benchmark_results$integration$SCRAN_cca)

SCANPY_uncorrected <- mean(integrated$pancreas@methods$SCANPY@benchmark_results$integration$SCANPY_uncorrected,
                           integrated$equal@methods$SCANPY@benchmark_results$integration$SCANPY_uncorrected,
                           integrated$unequal@methods$SCANPY@benchmark_results$integration$SCANPY_uncorrected,
                           integrated$symsim_simulations_1@methods$SCANPY@benchmark_results$integration$SCANPY_uncorrected,
                           integrated$symsim_simulations_2@methods$SCANPY@benchmark_results$integration$SCANPY_uncorrected)

SCANPY_harmony <- mean(integrated$pancreas@methods$SCANPY@benchmark_results$integration$SCANPY_harmony,
                       integrated$equal@methods$SCANPY@benchmark_results$integration$SCANPY_harmony,
                       integrated$unequal@methods$SCANPY@benchmark_results$integration$SCANPY_harmony,
                       integrated$symsim_simulations_1@methods$SCANPY@benchmark_results$integration$SCANPY_harmony,
                       integrated$symsim_simulations_2@methods$SCANPY@benchmark_results$integration$SCANPY_harmony)

SCANPY_scanorama <- mean(integrated$pancreas@methods$SCANPY@benchmark_results$integration$SCANPY_scanorama,
                         integrated$equal@methods$SCANPY@benchmark_results$integration$SCANPY_scanorama,
                         integrated$unequal@methods$SCANPY@benchmark_results$integration$SCANPY_scanorama,
                         integrated$symsim_simulations_1@methods$SCANPY@benchmark_results$integration$SCANPY_scanorama,
                         integrated$symsim_simulations_2@methods$SCANPY@benchmark_results$integration$SCANPY_scanorama)

SCANPY_bbknn <- mean(integrated$pancreas@methods$SCANPY@benchmark_results$integration$SCANPY_bbknn,
                     integrated$equal@methods$SCANPY@benchmark_results$integration$SCANPY_bbknn,
                     integrated$unequal@methods$SCANPY@benchmark_results$integration$SCANPY_bbknn,
                     integrated$symsim_simulations_1@methods$SCANPY@benchmark_results$integration$SCANPY_bbknn,
                     integrated$symsim_simulations_2@methods$SCANPY@benchmark_results$integration$SCANPY_bbknn)

SCANPY_cca <- mean(integrated$pancreas@methods$SCANPY@benchmark_results$integration$SCANPY_seurat,
                   integrated$equal@methods$SCANPY@benchmark_results$integration$SCANPY_seurat,
                   integrated$unequal@methods$SCANPY@benchmark_results$integration$SCANPY_seurat,
                   integrated$symsim_simulations_1@methods$SCANPY@benchmark_results$integration$SCANPY_cca,
                   integrated$symsim_simulations_2@methods$SCANPY@benchmark_results$integration$SCANPY_cca)

df <- data.frame(UNCORRECTED = c(SCT_uncorrected, SCRAN_uncorrected, SCANPY_uncorrected),
                 HARMONY = c(SCT_harmony, SCRAN_harmony, SCANPY_harmony),
                 SCANORAMA = c(SCT_scanorama, SCRAN_scanorama, SCANPY_scanorama),
                 CCA = c(SCT_cca, SCRAN_cca, SCANPY_cca),
                 BBKNN = c(SCT_bbknn, SCRAN_bbknn, SCANPY_bbknn))

rownames(df) <- c('SCT','SCRAN','SCANPY')

library(pheatmap)

pheatmap(mat = df, display_numbers = T)

Supplementary Figure 6

library(ggpubr)

plot_1 <- plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                           clust.method = 'PCA_BBKNN_BBKNN:LOUVAIN', column = 'neighbourhood_graph_res.0.2') +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_2 <- plot.reduced.dim(object = integrated$pancreas, reduction = 'SEURAT_UMAP', assay = 'SCANPY', 
                           clust.method = 'CCA_NN:LOUVAIN', column = 'neighbourhood_graph_res.0.2') + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_3 <- plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                           clust.method = 'metadata', column = 'celltype', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

plot_4 <-  plot.reduced.dim(object = integrated$pancreas, reduction = 'SEURAT_UMAP', assay = 'SCANPY', 
                            clust.method = 'metadata', column = 'celltype', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

ggarrange(plot_1, plot_2, plot_3, plot_4, nrow = 2, ncol = 2)

Supplementary Figure 7

plot_1 <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_HARMONY_UMAP', assay = 'SCANPY', 
                           clust.method = 'PCA_HARMONY_UMAP:PAM', column = 'k_6') +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_2 <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                           clust.method = 'PCA_BBKNN_BBKNN:LEIDEN', column = 'neighbourhood_graph_res.0.1') +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_3 <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_HARMONY_UMAP', assay = 'SCANPY', 
                           clust.method = 'metadata', column = 'celltype', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

plot_4 <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                           clust.method = 'metadata', column = 'celltype', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

ggarrange(plot_1, plot_2, plot_3, plot_4, nrow = 2, ncol = 2)

Supplementary Figure 8

plot_1 <- plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCT', 
                           clust.method = 'PCA_BBKNN_BBKNN:LOUVAIN', column = 'neighbourhood_graph_res.0.2') +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_2 <- plot.reduced.dim(object = integrated$unequal, reduction = 'SEURAT_UMAP', assay = 'SCANPY', 
                           clust.method = 'CCA_NN:LOUVAIN', column = 'neighbourhood_graph_res.0.2') + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_3 <- plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                           clust.method = 'metadata', column = 'celltype', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

plot_4 <- plot.reduced.dim(object = integrated$unequal, reduction = 'SEURAT_UMAP', assay = 'SCANPY', 
                           clust.method = 'metadata', column = 'celltype', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

ggarrange(plot_1, plot_2, plot_3, plot_4, nrow = 2, ncol = 2)

Supplementary Figure 9

plot_1 <-plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'CCA_UMAP', assay = 'SCANPY', 
                          clust.method = 'CCA_UMAP:PAM', column = 'k_3') +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_2 <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'SCANORAMA_UMAP', assay = 'SCANPY', 
                           clust.method = 'SCANORAMA_NN:LOUVAIN', column = 'res_0.1') + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_3 <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'CCA_UMAP', assay = 'SCANPY', 
                           clust.method = 'metadata', column = 'CellType', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

plot_4 <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'SCANORAMA_UMAP', assay = 'SCANPY', 
                           clust.method = 'metadata', column = 'CellType', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

ggarrange(plot_1, plot_2, plot_3, plot_4, nrow = 2, ncol = 2)

Supplementary Figure 10

plot_1 <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'CCA_UMAP', assay = 'SCANPY', 
                 clust.method = 'CCA_UMAP:PAM', column = 'k_3', add.label = T, label.size = 10) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_2 <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'SCANORAMA_UMAP', assay = 'SCANPY', 
                 clust.method = 'SCANORAMA_NN:LOUVAIN', column = 'res_0.1', add.label = T, label.size = 10) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12))

plot_3 <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'CCA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'CellType', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

plot_4 <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'SCANORAMA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'CellType', add.label = F) + 
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 12), 
        legend.title = element_text(face = 'bold', color = 'black', size = 12), 
        legend.text = element_text(face = 'bold', color = 'black', size = 12))

ggarrange(plot_1, plot_2, plot_3, plot_4, nrow = 2, ncol = 2)

Supplementary 11

SCT_uncorrected <-  plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('SCTransform') + ylab('Uncorrected') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_harmony <- plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_HARMONY_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Harmony') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_scanorama <- plot.reduced.dim(object = integrated$pancreas, reduction = 'SCANORAMA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Scanorama') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_bbknn <- plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('BBKNN') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_cca <- plot.reduced.dim(object = integrated$pancreas, reduction = 'SEURAT_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('CCA') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_uncorrected <-  plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scran') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_harmony <- plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_HARMONY_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_scanorama <- plot.reduced.dim(object = integrated$pancreas, reduction = 'SCANORAMA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_bbknn <- plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_cca <- plot.reduced.dim(object = integrated$pancreas, reduction = 'SEURAT_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_uncorrected <-  plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scanpy') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCANPY_harmony <- plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_HARMONY_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_scanorama <- plot.reduced.dim(object = integrated$pancreas, reduction = 'SCANORAMA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_bbknn <- plot.reduced.dim(object = integrated$pancreas, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_cca <- plot.reduced.dim(object = integrated$pancreas, reduction = 'SEURAT_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'dataset', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

ggarrange(SCT_uncorrected, SCRAN_uncorrected, SCANPY_uncorrected,
          SCT_harmony, SCRAN_harmony, SCANPY_harmony,
          SCT_scanorama, SCRAN_scanorama, SCANPY_scanorama,
          SCT_bbknn, SCRAN_bbknn, SCANPY_bbknn,
          SCT_cca, SCRAN_cca, SCANPY_cca, ncol = 3, nrow = 5)

Supplementary Figure 12

SCT_uncorrected <-  plot.reduced.dim(object = integrated$equal, reduction = 'PCA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('SCTransform') + ylab('Uncorrected') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_harmony <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_HARMONY_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Harmony') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_scanorama <- plot.reduced.dim(object = integrated$equal, reduction = 'SCANORAMA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Scanorama') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_bbknn <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('BBKNN') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_cca <- plot.reduced.dim(object = integrated$equal, reduction = 'SEURAT_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('CCA') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_uncorrected <-  plot.reduced.dim(object = integrated$equal, reduction = 'PCA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scran') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_harmony <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_HARMONY_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_scanorama <- plot.reduced.dim(object = integrated$equal, reduction = 'SCANORAMA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_bbknn <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_cca <- plot.reduced.dim(object = integrated$equal, reduction = 'SEURAT_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_uncorrected <-  plot.reduced.dim(object = integrated$equal, reduction = 'PCA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scanpy') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCANPY_harmony <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_HARMONY_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_scanorama <- plot.reduced.dim(object = integrated$equal, reduction = 'SCANORAMA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_bbknn <- plot.reduced.dim(object = integrated$equal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_cca <- plot.reduced.dim(object = integrated$equal, reduction = 'SEURAT_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

ggarrange(SCT_uncorrected, SCRAN_uncorrected, SCANPY_uncorrected,
          SCT_harmony, SCRAN_harmony, SCANPY_harmony,
          SCT_scanorama, SCRAN_scanorama, SCANPY_scanorama,
          SCT_bbknn, SCRAN_bbknn, SCANPY_bbknn,
          SCT_cca, SCRAN_cca, SCANPY_cca, ncol = 3, nrow = 5)

Supplementary Figure 13

SCT_uncorrected <-  plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('SCTransform') + ylab('Uncorrected') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_harmony <- plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_HARMONY_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Harmony') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_scanorama <- plot.reduced.dim(object = integrated$unequal, reduction = 'SCANORAMA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Scanorama') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_bbknn <- plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('BBKNN') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_cca <- plot.reduced.dim(object = integrated$unequal, reduction = 'SEURAT_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('CCA') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_uncorrected <-  plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scran') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_harmony <- plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_HARMONY_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_scanorama <- plot.reduced.dim(object = integrated$unequal, reduction = 'SCANORAMA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_bbknn <- plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_cca <- plot.reduced.dim(object = integrated$unequal, reduction = 'SEURAT_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_uncorrected <-  plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scanpy') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCANPY_harmony <- plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_HARMONY_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_scanorama <- plot.reduced.dim(object = integrated$unequal, reduction = 'SCANORAMA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_bbknn <- plot.reduced.dim(object = integrated$unequal, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_cca <- plot.reduced.dim(object = integrated$unequal, reduction = 'SEURAT_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'original.project', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

ggarrange(SCT_uncorrected, SCRAN_uncorrected, SCANPY_uncorrected,
          SCT_harmony, SCRAN_harmony, SCANPY_harmony,
          SCT_scanorama, SCRAN_scanorama, SCANPY_scanorama,
          SCT_bbknn, SCRAN_bbknn, SCANPY_bbknn,
          SCT_cca, SCRAN_cca, SCANPY_cca, ncol = 3, nrow = 5)

Supplementary Figure 14

SCT_uncorrected <-  plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'PCA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('SCTransform') + ylab('Uncorrected') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_harmony <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'PCA_HARMONY_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Harmony') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_scanorama <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'SCANORAMA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Scanorama') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_bbknn <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('BBKNN') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_cca <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'CCA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('CCA') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_uncorrected <-  plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'PCA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scran') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_harmony <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'PCA_HARMONY_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_scanorama <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'SCANORAMA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_bbknn <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_cca <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'CCA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_uncorrected <-  plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'PCA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scanpy') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCANPY_harmony <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'PCA_HARMONY_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_scanorama <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'SCANORAMA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_bbknn <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_cca <- plot.reduced.dim(object = integrated$symsim_simulations_1, reduction = 'CCA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

ggarrange(SCT_uncorrected, SCRAN_uncorrected, SCANPY_uncorrected,
          SCT_harmony, SCRAN_harmony, SCANPY_harmony,
          SCT_scanorama, SCRAN_scanorama, SCANPY_scanorama,
          SCT_bbknn, SCRAN_bbknn, SCANPY_bbknn,
          SCT_cca, SCRAN_cca, SCANPY_cca, ncol = 3, nrow = 5)

Supplementary Figure 15

SCT_uncorrected <-  plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'PCA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('SCTransform') + ylab('Uncorrected') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), 
        axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_harmony <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'PCA_HARMONY_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Harmony') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_scanorama <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'SCANORAMA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('Scanorama') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_bbknn <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('BBKNN') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCT_cca <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'CCA_UMAP', assay = 'SCT', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ylab('CCA') + 
  theme(axis.title.y.left = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_uncorrected <-  plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'PCA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scran') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCRAN_harmony <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'PCA_HARMONY_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_scanorama <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'SCANORAMA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_bbknn <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCRAN_cca <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'CCA_UMAP', assay = 'SCRAN', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_uncorrected <-  plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'PCA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5)) + 
  ggtitle('Scanpy') + 
  theme(plot.title = element_text(hjust = 0.5, face = 'bold', size = 25), legend.position="none")

SCANPY_harmony <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'PCA_HARMONY_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_scanorama <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'SCANORAMA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_bbknn <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'PCA_BBKNN_BBKNN:UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

SCANPY_cca <- plot.reduced.dim(object = integrated$symsim_simulations_2, reduction = 'CCA_UMAP', assay = 'SCANPY', 
                 clust.method = 'metadata', column = 'batch', add.label = F, label.size = 5) +
  theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.line = element_blank(), 
        axis.ticks = element_blank(), axis.title = element_blank(), 
        plot.title = element_text(face = 'bold', hjust = 0.5, size = 12), 
        plot.subtitle = element_text(face = 'bold', hjust = 0.5, size = 5), legend.position="none")

ggarrange(SCT_uncorrected, SCRAN_uncorrected, SCANPY_uncorrected,
          SCT_harmony, SCRAN_harmony, SCANPY_harmony,
          SCT_scanorama, SCRAN_scanorama, SCANPY_scanorama,
          SCT_bbknn, SCRAN_bbknn, SCANPY_bbknn,
          SCT_cca, SCRAN_cca, SCANPY_cca, ncol = 3, nrow = 5)